// 导入Vue
import Vue from 'vue'
// 导入vuex
import Vuex from 'vuex'
Vue.use(Vuex)


// 我们之前封装了专门用来读取localStorage里读取token的方法
import { getToken, setToken,  removeToken } from '../utils/storage'

// 实例化一个vuex仓库
const store = new Vuex.Store({
  
  state: {
    // 从localStorage里读取出来
    // 如果是第一次访问网站localStorage肯定没有内容
    // 所以会得到null，但是这个属性不能为null
    // 因为在导航守卫里要用，如果为null，再取属性会直接报错
    // 所以我们应该这样，如果localStorage里有值，那就用localStorage的值
    // 如果没有值，那就给一个空对象
    token: getToken() || {},

    // 保存用户信息的，默认为空对象
    userInfo: {}
  },

  mutations: {

    // 提供操作数据的方法
    saveToken (state, tokenObj) {

      setToken(tokenObj)
      state.token = tokenObj
    },
    
    // 提供给userInfo赋值的方法
    saveUserInfo (state, userInfo) {

      state.userInfo = userInfo
    },

    // 清空token，也要提供一个操作token的方法
    clearAllInfo (state) {

      // 删除本地存储里的token
      removeToken()
      // 删除vuex里的token
      state.token = {}
      // 删除vuex里的用户信息
      state.userInfo = {}
    }
  }
})

// 把store暴露出去
export default store